Method and system for processing an electronic document using streaming optimization via programmatic analysis of XML use

ABSTRACT

A method for processing an electronic document may include performing a programmatic analysis to determine all required portions of an input document to produce an output document. The method may also include generating an executable transformer to produce the output document from the input document. The method may further include producing the output document by transforming any streamable parts of the input document directly to corresponding parts of the output document without extraneous intermediate buffering.

BACKGROUND OF THE INVENTION

The present invention relates to optimizing processing of electronicdocuments, such as Extensible Markup Language (XML) documents or similarelectronic documents, and more particularly to a method and system forprocessing an electronic document using streaming optimization viaprogrammatic analysis.

The Extensible Markup Language (XML) has gained popularity as astandardized syntax for communications over networks such as theInternet, and is being used in a wide range of applications ranging fromshort machine-to-machine messages up to extensive databases anddocuments. One limiting factor in the use of XML and XML tooling is thatnaive or simple processing approaches break down or become lessefficient as document size increases. Loading an entire document into anin-memory data model (equivalently, document model) for processing,while efficient for small documents, becomes more onerous as the modelsize increases, requiring much more memory capacity and processing time.None the less, many tasks have been driven to use such models, sincethey may involve random access to the document's contents and thus mayneed substantially the entire document to be available for immediateretrieval. Extensible Stylesheet Language Transformation (XSLT)stylesheet execution is one example of such a random-access task; theXSLT language may access any portion of the input document at any timeduring processing.

BRIEF SUMMARY OF THE INVENTION

In accordance with an embodiment of the present invention, a method forprocessing an electronic document may include performing a programmaticanalysis to determine all required portions of an input document toproduce an output document. The method may also include generating anexecutable transformer to produce the output document from the inputdocument. The method may further include producing the output documentby transforming any streamable parts of the input document directly tocorresponding parts of the output document without extraneousintermediate buffering.

In accordance with another embodiment of the present invention, a systemfor processing a document may include a programmatic analyzer operableon a processor to determine all required portions of an input documentto produce an output document. The system may also include astreamability analysis module to determine which nodes and contexts ofan input document are streamable to produce the output document. Thesystem may further include a buffer to build-up an optimized documentmodel from any non-streamable parts of the input document.

In accordance with another embodiment of the present invention, acomputer program product to process an electronic document may include acomputer usable medium having computer usable program code embodiedtherein. The computer usable medium may include computer usable programcode configured to perform a programmatic analysis to determine allrequired portions of an input document to produce an output document.The computer usable medium may also include computer usable program codeconfigured to generate an executable transformer to produce the outputdocument from the input document. The computer useable medium may alsoinclude computer usable program code configured to produce the outputdocument by transforming any streamable parts of the input documentdirectly to corresponding parts of the output document withoutextraneous intermediate buffering.

Other aspects and features of the present invention, as defined solelyby the claims, will become apparent to those ordinarily skilled in theart upon review of the following non-limited detailed description of theinvention in conjunction with the accompanying figures.

BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS

FIG. 1A is a flow chart of an exemplary method for transforming adocument processing program during compilation including streamingoptimization via programmatic analysis of XML use in accordance with anembodiment of the present invention.

FIG. 1B is a flow chart of an exemplary method for processing an inputdocument including streaming optimization in accordance with anembodiment of the present invention.

FIG. 2 is an example of a tree representing XML data in an XML documentin accordance with an embodiment of the present invention.

FIG. 3 is a flow chart of an example of a method for performingstreamability analysis in accordance with an embodiment of the presentinvention.

FIG. 4 is an example of a method for determining streamability of acurrent context based on the data reference that defines the context inaccordance with an embodiment of the present invention.

FIG. 5 is a flow chart of an example of a method for stream-optimizingany streamable contexts to generate an output document in accordancewith an embodiment of the present invention.

FIG. 6 is a block diagram of an example of a system for processing anelectronic document using streaming optimization via programmaticanalysis of XML use in accordance with an embodiment of the presentinvention.

DETAILED DESCRIPTION OF THE INVENTION

The following detailed description of embodiments refers to theaccompanying drawings, which illustrate specific embodiments of theinvention. Other embodiments having different structures and operationsdo not depart from the scope of the present invention.

As will be appreciated by one of skill in the art, the present inventionmay be embodied as a method, system, or computer program product.Accordingly, the present invention may take the form of an entirelyhardware embodiment, an entirely software embodiment (includingfirmware, resident software, micro-code, etc.) or an embodimentcombining software and hardware aspects that may all generally bereferred to herein as a “circuit,” “module” or “system.” Furthermore,the present invention may take the form of a computer program product ona computer-usable storage medium, such as for example medium 638 in FIG.6, having computer-usable program code embodied in the medium.

Any suitable computer usable or computer readable medium may beutilized. The computer-usable or computer-readable medium may be, forexample but not limited to, an electronic, magnetic, optical,electromagnetic, infrared, or semiconductor system, apparatus, device,or propagation medium. More specific examples (a non-exhaustive list) ofthe computer-readable medium would include the following: an electricalconnection having one or more wires, a tangible medium such as aportable computer diskette, a hard disk, a random access memory (RAM), aread-only memory (ROM), an erasable programmable read-only memory (EPROMor Flash memory), an optical fiber, a portable compact disc read-onlymemory (CD-ROM), or other tangible optical or magnetic storage device;or transmission media such as those supporting the Internet or anintranet. Note that the computer-usable or computer-readable mediumcould even be paper or another suitable medium upon which the program isprinted, as the program can be electronically captured, via, forinstance, optical scanning of the paper or other medium, then compiled,interpreted, or otherwise processed in a suitable manner, if necessary,and then stored in a computer memory. In the context of this document, acomputer-usable or computer-readable medium may be any medium that cancontain, store, communicate, propagate, or transport the program for useby or in connection with the instruction execution system, apparatus, ordevice. The computer-usable medium may include a propagated data signalwith the computer-usable program code embodied therewith, either inbaseband or as part of a carrier wave. The computer usable program codemay be transmitted using any appropriate medium, including but notlimited to the Internet, wireline, optical fiber cable, pigeon, radiofrequency (RF) or other means.

Computer program code for carrying out operations of the presentinvention may be written in an object oriented programming language suchas Java, Smalltalk, C++ or the like. However, the computer program codefor carrying out operations of the present invention may also be writtenin conventional procedural programming languages, such as the “C”programming language or similar programming languages, or in functionalprogramming languages, such as Haskell, Standard Meta Language (SML) orsimilar programming languages. The program code may execute entirely onthe user's computer, partly on the user's computer, as a stand-alonesoftware package, partly on the user's computer and partly on a remotecomputer or entirely on the remote computer or server. In the latterscenario, the remote computer may be connected to the user's computerthrough a local area network (LAN) or a wide area network (WAN), or theconnection may be made to an external computer (for example, through theInternet using an Internet Service Provider).

The present invention is described below with reference to flowchartillustrations and/or block diagrams of methods, apparatus (systems) andcomputer program products according to embodiments of the invention. Itwill be understood that each block of the flowchart illustrations and/orblock diagrams, and combinations of blocks in the flowchartillustrations and/or block diagrams, can be implemented by computerprogram instructions. These computer program instructions may beprovided to a processor of a general purpose computer, special purposecomputer, or other programmable data processing apparatus to produce amachine, such that the instructions, which execute via the processor ofthe computer or other programmable data processing apparatus, createmeans for implementing the functions/acts specified in the flowchartand/or block diagram block or blocks.

These computer program instructions may also be stored in acomputer-readable memory that can direct a computer or otherprogrammable data processing apparatus to function in a particularmanner, such that the instructions stored in the computer-readablememory produce an article of manufacture including instruction meanswhich implement the function/act specified in the flowchart and/or blockdiagram block or blocks.

The computer program instructions may also be loaded onto a computer orother programmable data processing apparatus to cause a series ofoperational steps to be performed on the computer or other programmableapparatus to produce a computer implemented process such that theinstructions which execute on the computer or other programmableapparatus provide steps for implementing the functions/acts specified inthe flowchart and/or block diagram block or blocks.

FIG. 1A is a flow chart of an exemplary method 100 for transforming adocument processing program during compilation including streamingoptimization via programmatic analysis of XML use in accordance with anembodiment of the present invention. Examples of the electronic documentmay include forms or data associated with an e-commerce transaction orother data for some purpose that may be transmitted across a network,such as the Internet, private network or the like, between differentcomputing or communications devices. While the present invention may bedescribed with respect to an electronic document in XML, and ExtensibleStylesheet Language Transformations (XSLT) for transforming XMLdocuments into other forms or types of XML documents, the principles ofthe embodiments of the present invention described herein may beapplicable to any stylesheets, templates, or other code, and to inputdocument structures other than XML.

For purposes of describing the present invention, an example of the formand structure of an XML document will be briefly described. Referringalso to FIG. 2, FIG. 2 is an example of a tree 200 representing XMLdata. The XML data may define an XML document. The beginning or firstnode from which the tree 200 branches may be referred to as the root orroot node 202. The tree 200 may then branch to other nodes 204. The XMLdata may also be represented as follows:

<book>   <title>computers</title>   <editor>john</editor>   <authors>  <name>john</name>     <name>Robert</name>   </authors>   <price />  <book>

Each node 204 may include data.

Contexts come from the process of executing the document processingprogram or XSLT program. Context may define a position of a node in thetree, such as what parent nodes are above a particular node in the tree.The context may change depending upon how a set or group of nodes may bedefined. Consult the XSLT specification for precise definitions.

An XPath or XML Path Language is an expression language for addressingportions of an XML document, or for computing values, such as strings,numbers, Boolean values or the like based on the content of an XMLdocument.

Referring back to FIG. 1A, in block or module 102, a document processingprogram may be conditioned, formed or modified to facilitate analysis.The document processing program may be an Extensible Stylesheet Language(XSL) stylesheet, an Extensible Query Language (XQuery) expression, orsimilar document processing program in an electronic or coded form.Examples of conditioning, forming and modifying may include: correctlyapplying any modes, template priorities, import precedence or the like;removing any reverse paths from the document processing program;converting any conditional expressions to a single canonical style ofexpression; converting implied actions to explicit actions; replacingany “Apply-Templates” expressions; and any other operations to simplifythe document processing program for analysis. An example of a method forconditioning, forming or modifying the document processing program isdescribed in U.S. patent application Ser. No. 11/745,028, filed May 7,2007, entitled “Method and System for Effective Schema Generation viaProgrammatic Analysis,” by Abraham Heifets et al., which is assigned tothe same assignee as the present application and is incorporated hereinby reference.

In block or module 104, programmatic analysis may be performed on thedocument processing program or stylesheet to determine all potentiallyused or required portions of the input document in carrying out aparticular processing or transformation of the input document. Thepotentially used or required portions of the input document imply an“effective schema” or “use-based” schema. The programmatic analysis todetermine required portions of the input document may involve awhole-program data use analysis. The programmatic analysis may includeanalyzing accesses by a stylesheet to the input document. Theprogrammatic analysis may further include determining which nodes of theinput document affect the behavior of the output program or optimizedoutput program. An example of a method to perform programmatic analysisis also described in U.S. patent application Ser. No. 11/745,028.

In block or module 106, the document processing program may be optimizedby specializing against a specific document model. An example of aspecialization process is described in U.S. patent application Ser. No.11/501,216, filed Aug. 7, 2006, entitled “Method and Apparatus for InputSpecialization” by Dennis A. Quan et al., which is assigned to the sameassignee as the present application and is incorporated herein in itsentirety by reference.

Specializing a document processing program against a specific documentmodel may involve simplifying the document processing program, therebyreducing the number of operations. For example a naive document modelmay represent the complete document and may include information, such asunused data members and/or attributes, that may not be used in aparticular application. Operations associated with these unused datamembers and/or attributes may be removed. Additionally, any reverse pathuse may be removed from the document processing program, permitting theprogram structure to be unidirectionally linked in only a child nodedirection. To achieve this, ancestor references to data elements may beidentified and stored for future references to ancestor or parent nodes.Other examples of optimizing the document processing program bysimplifying or specializing against the document model are described inU.S. patent application Ser. No. 11/501,216.

In block 108, a streamability analysis may be performed to determinewhich nodes and contexts of the input document may be processed in astreaming fashion. Streaming may be defined as directly producing anoutput from the input without saving any intermediate data longer thannecessary, thus reducing in-process memory requirements and improvingexecution speed. Determining which nodes may be processed this way mayinclude determining whether output production can be performed orcreated directly while parsing the input document. In other words, anode may be stream-processable if the output based upon this node'scontribution can be computed and written out as the node's input data isparsed. More specifically, determining which nodes and contexts of theinput document can be stream-processed may include determining whichportions of the optimized output program rely upon references orportions of the input document that are entirely local to a particularsubtree of the input document. Deforestation and inliningcode-reorganization may be used to move data for streamable portions orparts of the input document into a generated parser during compile time,as described below, to produce corresponding portions of the outputdocument as the input document is parsed. Any nodes in an optimizeddocument model which will never be referenced as nodes can be eliminatedfrom the data model and discarded during parsing. A context which issuitable for stream-optimization and stream-processing may be referredto as a streaming context; one which is not suitable for thisoptimization may be referred to as a non-streaming context.

In our exemplary embodiment of a stream-optimization algorithm, allnodes, particularly the root node, are optimistically consideredcandidates for stream-processing until the optimizer discoversotherwise. A context may be streamable if the data reference thatdefines the context is streamable. An example of a method for performinga streamability analysis will be described in more detail with referenceto FIG. 3. An example of a method for determining streamability of acurrent context will be described in more detail with reference to FIG.4.

In block or module 110, an executable transformer may be generated toprocess the input document to produce the output document during runtime as described in more detail with reference to FIG. 1B. Generatingthe executable transformer may include generating a parser and optimizedprogram code for processing the input document. An example of a methodfor generating a parser is described in U.S. patent application Ser. No.11/745,028.

FIG. 1B is a flow chart of an exemplary method 112 for processing aninput document including streaming optimization in accordance with anembodiment of the present invention. The functions or operations of themethod 112 may be performed at run time to transform the input documentor XML document, while the functions and operations of the method 100 ofFIG. 1A may be performed by a compiler during compilation of thedocument processing program.

In block 114, the process to transform an input document such as an XMLdocument or other input document to a desired output document may start.In block 116, an attempt may be begun to generate a first piece of theoutput document (if this is the first time through the process) or anext piece of the output document. This portion of the method may bethought of as a pull system. The output stream may request a next pieceof output for an executable transformer, such as executable transformer620 in FIG. 6. The transformer tries to generate the next piece ofoutput which may succeed, yielding the next piece of output. If thetransformer fails because more of the input is needed to generate thenext piece of output, the next piece of input is read and thetransformer tries to generate the output again or fails because theentire output has been generated as may be determined in block 118. Inwhich case the method 112 may terminate at termination 120.

In block 118, a determination may be made of whether generation of theoutput document is complete. If so, the method 112 may end attermination 120. Otherwise, the method 112 may advance to block 122. Inblock 122, a check may be made to determine if the required part of theinput document for the next piece of the output document has beenbuffered in memory. If the required input part has not been buffered inblock 124, the method 112 may advance to block 126.

In block 126, the next piece of the input document may be read. In block128, needed information from that piece may be added to an optimizeddocument model, as specified by the whole-program data usage analysis inblock 104 of FIG. 1A. In block 130, the optimized document model may bestored as it is being built-up from successive parts or pieces of theinput document that have not yet been buffered. The method 112 may thenreturn to block 116 and an attempt may be made to generate the nextpiece of the output document. The method 112 may then proceed aspreviously described.

Returning to block 124, if the required input part has been previouslybuffered in the optimized document model, the method 112 may advance toblock 132. In block 132, a transform specified by the executabletransformer may be executed for this part or piece of the inputdocument. The stored, built-up optimized document model may be processedby the executable transformer to complete the output document 138. Inblock 134, the results of the transformation may be written into theoutput stream to form the piece of the output document 136 correspondingto the particular part of the input document.

In block 138, the part or parts from the input data model that willnever be referenced further by the executable transformer (as determinedby the streamability analysis in block 108) may be erased from memory tosubstantially (sometimes dramatically) reduce the amount of memory beingused by the process. The method 112 may then return to block 116 toattempt to generate the next piece of the output document and the method112 may proceed as previously discussed.

FIG. 3 is a flow chart of an example of a method 300 for performingstreamability analysis in accordance with an embodiment of the presentinvention. The method 300 may be used to perform the streamabilityanalysis in block 108 of the method 100 in FIG. 1.

In block 302, all data references within a context may be initially(optimistically) assumed to be streamable. In block 304, the actualanalysis may then begin with an input document root path that may bedepicted by a slash, ‘/’. In block 306, the root path may be matched toa template or XSLT stylesheet template. The root path may be set as thecurrent context.

In block 308, a determination may be made if the current context can bestream-processed based on the data references that define the context.An example of a method for determining the streamability of the currentcontext will be described with reference to FIG. 4. If the currentcontext is streamable in block 310, the current context may be streamedduring parsing as previously described and the method 300 may advance toblock 312. Here, the current context may be stream-optimized by movingthe processing code into the parser. If the current context is notstreamable in block 310, the method 300 may advance to block 314.

In block 314, the method 300 has determined that the current context isnot reliably stream-optimizable, and also that the transformer would notbe able to correctly produce any output for any constituent pieces ofthe current context by streaming. Accordingly, input data required byany data references defining the context must be buffered duringprocessing, and the data references may be marked or otherwiseidentified as non-streamable.

In block 316, recursive analysis may be performed by analyzing anycontext-defined data reference within a current context. Thestreamability of context-defining data references within the currentcontext must be re-examined if there is any change in the streamabilityof the current context, since when a node is marked as nonstreamable(and hence must be buffered) all its contents should be likewise marked.If a streamability status of a context is changed, then all of theinner/child/dependent/or similar context definitions need to be gonethrough and examined again. This situation arises when something ismarked as “must-be-buffered” or a similar designation, it causes allcontained pieces of the input document to be must-be-buffered also.

FIG. 4 is an example of a method 400 for determining streamability of acurrent context based on the data references that define the context inaccordance with an embodiment of the present invention. The method 400may be used to determine the streamability of the current context inblock 308 of the method 300 of FIG. 3.

In block 402, a determination may be made if a construct, e.g.,optimized document model, optimized document tree or the like, mayrequire output generation in a “non-document order”, meaning that theorder in which the information is required in the output is differentfrom that in the input document. For example, the XSLT operationsxsl:sort or xsl:key may require output generation in a non-documentorder. Such data references may be marked or otherwise identified asnon-streamable.

In block 404, a decision is made if the output generation may berequired in non-document order from the analysis in block 402. If so,the method 400 may advance to block 406 where it records that there-ordered nodes will have to be buffered. If output generation is indocument order, the method 400 may advance to block 408. In block 408,the method has determined that the first input data reference requiredto produce an output is streamable. For example, in a streamable contextthe first XPath which accesses a child element is streamable. This datareference may be marked as streamable.

In block 410, a determination may be made if the previous input datareference in the current context only references information in anopening element SAX-like event. If so, the data reference is streamable.SAX herein refers to the Simple Application Programming Interface (API)for XML, which presents the input document's contents via a sequencecalls from the parser (“events”) representing parsing units of thedocument (as opposed to the W3C's Document Object Model and otherin-memory models which present the document as a random-access navigabledata structure). Thus, “SAX-like event” herein refers to parsing-unitevent of this kind, whether from an implementation of the SAX API orfrom other sources.

In block 412, a decision may be made if the previous input data onlyreferences information from the opening element SAX-like event in block410. If not, the method 400 may advance to block 414. In block 414, allother data references are not streamable. If such an XPath determines anew context (for example, as the select in an “xsl:for-each”expression), the context is not streamable. As another example,subsequent XPaths in a streamable template which access a child elementare not streamable. Such data and contexts may be marked or otherwiseidentified as non-streamable. If a context is marked as non-streamable,then anything built off the context also is non-streamable.

If a determination is made in block 412 that the previous input dataonly references information from an opening element SAX-like event inblock 410, the method 400 may advance to block 416. In block 416, themethod 400 has concluded that the data references in the current contextare streamable for SAX-like events. For example, sequential uses ofelement names, types, or attribute names or values, or similar datareferences which reference the same node are streamable. In other words,if a node's name can be read in a streaming fashion, and the node's datais accessed again before reading another node's data, the node is stillstreamable. But if different elements' data are being accessed, then thenode probably will not be streamable. As another example, if a file isbeing copied line-by-line, the file can be streamed since each line canbe held in memory for substantially very little time. Similarly, if eachline is being written twice, one after the other, the file can still bestreamed. However, if the entire file is being copied twice,back-to-back, then the entire file needs to be retained in memory so itis available for the second copying pass.

FIG. 5 is a flow chart of an example of a method 500 forstream-optimizing any streamable contexts to generate an output documentin accordance with an embodiment of the present invention. The method500 may be used for performing the operation in block 312 of FIG. 3.

In block 502, the output generation may begin at the data reference ofthe root context. If the current context has been marked or designatedas a streamable context, the context or output producing code may bemoved into the parser's handler for a corresponding element, eliminatingthe need to instantiate an in-memory model for that context's definingdata references.

In block 504, the method replaces explicit iteration in the stylesheetor template with the implicit iteration over the parsing units whichoccurs as they are parsed from the input stream. For example, thestylesheet might iterate over a set of elements with an “xsl:for-each”statement. In a streaming model, this explicit iteration is performedimplicitly by evaluating the for-each body as each element isencountered in the input stream. This means as elements are encounteredin the input stream, appropriate code can be produced that yields theintended output without requiring any in-process memory after the outputhas been generated.

In block 506, if the streaming context has any references to streamablechildren, the code which produces their output can be moved into theparser's handler as well (by recursive application of this streamingoptimization), to produce the appropriate output code or optimizedprogram code or data to produce the output document. Initially, aprogram is used where a data model is built-up. The data model may thenbe processed to produce the output. The output production which is safeis moved into the model construction first. The first movement stepalways succeeds because the outermost data-model generation returns theentire document model. So all necessary data is, by definition, present.The next smaller independent subtree is then moved deeper into the modelconstruction. This motion or action is repeated, moving smaller andsmaller subtrees deeper and deeper into the model construction untileverything has been moved into the model construction or everything elseneeds to be buffered.

FIG. 6 is a block diagram of an example of a system 600 for processingan electronic document using streaming optimization via programmaticanalysis of XML use in accordance with another embodiment of the presentinvention. The methods 100, 112, 300, 400 and 500 may be embodied inand/or performed by the system 600. A document processing program 602 orXML program, such as an XSL stylesheet or similar program may bereceived via a network or via some other means by a program conditioner604. The program conditioner 604 may produce a conditioned program 606.The program conditioner 604 may perform operations similar to thosedescribed with respect to the block 102 of the method 100 of FIG. 1A.

A programmatic analyzer 608 may receive the conditioned program 606. Theprogrammatic analyzer 608 may determine all required or used portions ofan input document 610 based on the conditioned document processingprogram 606. The programmatic analyzer 608 may perform operationssimilar to those described with respect to block 104 in FIG. 1.

An optimization module 612 or input specialization transform module maybe associated with the programmatic analyzer 608 and may optimize theconditioned document processing program 606 to generate an optimizeddocument processing program. The optimization module 612 may performsimilar operations to those described with respect to block or module106 in FIG. 1A.

A streamability analysis module 614 may be provided to determine whichnodes and contexts of the input document may be streamable. Anynon-streamable nodes or contexts or parts of the input document may bebuffered as described herein. The streamability analysis module 614 mayperform operations similar to those described with respect to block 108of FIG. 1A and the methods 300 and 400 of FIGS. 3 and 4, respectively.

The document conditioner 604, the programmatic analyzer 608,optimization module 612 and streamability module 614 may form part of acompiler 616 on a processor 618.

An executable transformer 620 may result from the streamability analysismodule 614. The executable transformer 620 may include a parser 622 andoptimized program code 624 stored and operable on the processor 618 toprocess the input document 610 during run time. The input document 610may be transformed by the executable transformer 620 to form or producean output document 626 as described in more detail herein. Theexecutable transformer 620 may perform or embody the method 112 of FIG.1B. Any part of the input document 610 which is streamable may betransformed by the executable transformer 620 and the transformedstreamable part 625 may be written into the output stream to produce acorresponding piece of the output document 626. Parts of the input datamodel that will never be referenced again by the executable transform asdetermined by the streamability analysis may be erased from memory afterbeing transformed.

Any non-streamable parts 628 of the input document 610 may be used tobuild up an optimized document model 630 as specified by thewhole-program data usage analysis in block 104 of FIG. 1A. The documentmodel 630 may be buffered on a buffer 632 as it is being built-up. Thestored built-up optimized document model 630 may then be processed bythe executable transformer 620 similar to that described with respect toblock 140 in FIG. 1B. The other parts 634 processed by the executabletransformer 620 from the optimized document model 630 may complete theoutput document 626. The output document 626 may be stored or encoded ona computer writable medium, such as medium 638.

Input devices, other output devices or combination input/output devices636 may be associated with the processor 618 to permit a user tocontrol, update and maintain the processor 618 and associatedcomponents. For example, a computer program product embodied in atangible medium 638, similar to that previously described, may be usedto transfer computer useable program code to the processor 618. Thecomputer useable program code may embody the methods 100, 112, 300, 400and 500. The medium 638 may also embody updates for the documentconditioner 604, program analyzer 612, streamability module 614, andoptimization module 612.

The flowcharts and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof code, which comprises one or more executable instructions forimplementing the specified logical function(s). It should also be notedthat, in some alternative implementations, the functions noted in theblock may occur out of the order noted in the figures. For example, twoblocks shown in succession may, in fact, be executed substantiallyconcurrently, or the blocks may sometimes be executed in the reverseorder, depending upon the functionality involved. It will also be notedthat each block of the block diagrams and/or flowchart illustration, andcombinations of blocks in the block diagrams and/or flowchartillustration, can be implemented by special purpose hardware-basedsystems which perform the specified functions or acts, or combinationsof special purpose hardware and computer instructions.

The terminology used herein is for the purpose of describing particularembodiments only and is not intended to be limiting of the invention. Asused herein, the singular forms “a”, “an” and “the” are intended toinclude the plural forms as well, unless the context clearly indicatesotherwise. It will be further understood that the terms “comprises”and/or “comprising,” when used in this specification, specify thepresence of stated features, integers, steps, operations, elements,and/or components, but do not preclude the presence or addition of oneor more other features, integers, steps, operations, elements,components, and/or groups thereof.

Although specific embodiments have been illustrated and describedherein, those of ordinary skill in the art appreciate that anyarrangement which is calculated to achieve the same purpose may besubstituted for the specific embodiments shown and that the inventionhas other applications in other environments. This application isintended to cover any adaptations or variations of the presentinvention. The following claims are in no way intended to limit thescope of the invention to the specific embodiments described herein.

What is claimed is:
 1. A method for processing an electronic document,comprising: performing, by a processor, a programmatic analysis todetermine all required portions of an input document to produce anoutput document; generating, by the processor, an executable transformerto produce the output document from the input document; and producing,by the processor, the output document by transforming any streamableparts of the input document directly to corresponding parts of theoutput document without extraneous intermediate buffering.
 2. The methodof claim 1, wherein generating the executable transformer comprises:generating a parser to parse the input document; and generating anoptimized program code to transform the input document to produce theoutput document.
 3. The method of claim 1, further comprising:building-up an optimized document model from any non-streamable parts ofthe input document; and processing the built-up optimized document modelin the executable transformer to complete the output document.
 4. Themethod of claim 1, wherein performing the programmatic analysiscomprises performing a whole-program data usage analysis.
 5. The methodof claim 1, wherein performing the programmatic analysis comprises:analyzing accesses by a stylesheet to the input document to generate theexecutable transformer; and rewriting expressions of the stylesheet thataddress any required portions of the input document.
 6. The method ofclaim 1, further comprising determining which nodes and contexts of theinput document are streamable.
 7. The method of claim 6, furthercomprising determining that the node is streamable if the node canproduce an output to which the node contributes as the node's input datais parsed.
 8. The method of claim 6, wherein determining which nodes andcontexts of an input document are streamable comprises determining whichportions of the optimized output program rely upon references of theinput document that are entirely local to a particular subtree of theinput document.
 9. The method of claim 6, wherein determining whichnodes and contexts of an input document are streamable comprises:initializing all data references as being streamable; matching a rootpath of the input document into a template; setting the root path of theinput document as a current context; determining if the current contextis streamable based on a data reference defining the current context;streaming the current context during parsing of the input document inresponse to the current context being streamable; and buffering thecurrent context in response to the current context being non-streamable.10. The method of claim 9, wherein determining if the current context isstreamability comprises: determining if an output construct requiresoutput generation in a non-document order; marking a data reference asnon-streamable in response to the output construct requiring outputgeneration in a non-document order and buffering a re-ordered form ofthe input document; marking a first input data reference required toproduce the output construct as streamable in response to the outputconstruct not requiring generation in a non-document order; anddetermining if previous input data reference in the current context onlyreferences information in an opening element SAX-like event, wherein thecurrent data reference is streamable in response to the previous inputdata referencing information in the opening element SAX-like event. 11.The method of claim 1, further comprising erasing from a memory anyparts of the input document which will never again be referenced by theexecutable transform as determined from a streamability analysis.
 12. Asystem for processing a document, comprising: a programmatic analyzeroperable on a processor to determine all required portions of an inputdocument to produce an output document; a streamability analysis moduleto determine which nodes and contexts of an input document arestreamable to produce the output document; and a buffer to build-up anoptimized document model from any non-streamable parts of the inputdocument.
 13. The system of claim 12, further comprising an executabletransformer generable to produce the output document transformed fromthe input document.
 14. The system of claim 13, wherein the executabletransformer comprises: a parser to parse the input document; anoptimized program code to transform the input document to produce theoutput document.
 15. The system of claim 12, wherein the streamabilityanalysis module comprises: means for initializing all data references asbeing streamable; means for matching a root path of the input documentinto a template; means for setting the root path of the input documentas a current context; means for determining if the current context isstreamable by determining a streamability of data references inside thecurrent context; means for streaming the current context during parsingof the input document in response to the current context beingstreamable; and a buffer to buffer the current context in response tothe current context being non-streamable.
 16. A computer program productto process an electronic document, the computer program productcomprising: a computer usable storage medium having computer usableprogram code embodied therein, the computer usable storage mediumcomprising: computer usable program code configured to perform aprogrammatic analysis to determine all required portions of an inputdocument to produce an output document; computer usable program codeconfigured to generate an executable transformer to produce the outputdocument from the input document; and computer usable program codeconfigured to produce the output document by transforming any streamableparts of the input document directly to corresponding parts of theoutput document without extraneous intermediate buffering.
 17. Thecomputer program product of claim 16, wherein the computer usable mediumfurther comprises: computer usable program code configured to generate aparser to parse the input document; and computer usable program codeconfigured to generate an optimized program code to transform the inputdocument to produce the output document.
 18. The computer programproduct of claim 16, wherein the computer usable medium furthercomprises computer usable program code configured to buffer anynon-streamable nodes and contexts of the input document.
 19. Thecomputer program product of claim 16, wherein the computer usable mediumfurther comprises: computer usable program code configured to build-upan optimized document model from any non-streamable parts of the inputdocument; and computer usable program code configured to process thebuilt-up optimized document model in the executable transformer tocomplete the output document.
 20. The computer program product of claim16, wherein the computer usable medium further comprises: computerusable program code configured to initialize all data references asbeing streamable; computer usable program code configured to match aroot path of the input document into a template; computer usable programcode configured to set the root path of the input document as a currentcontext; computer usable program code configured to determine if thecurrent context is streamable by determining streamability of datareferences inside the current context; computer usable program codeconfigured to stream the current context during parsing of the inputdocument in response to the current context being streamable; andcomputer usable program code configured to buffer the current context inresponse to the current context being non-streamable.